{ "cells": [ { "cell_type": "markdown", "id": "0dd8b728-adca-4304-a066-31690f8abeb6", "metadata": {}, "source": [ "# Deterministic Optimal Consumption-Investment Model\n", "\n", "**Randall Romero Aguilar, PhD**\n", "\n", "This demo is based on the original Matlab demo accompanying the Computational Economics and Finance 2001 textbook by Mario Miranda and Paul Fackler.\n", "\n", "Original (Matlab) CompEcon file: **demdoc01.m**\n", "\n", "Running this file requires the Python version of CompEcon. This can be installed with pip by running\n", "\n", " !pip install compecon --upgrade\n", "\n", "Last updated: 2021-Oct-01\n", "
" ] }, { "cell_type": "markdown", "source": [ "## About\n", "\n", "Utility maximizing agent must decide how much to consume and how much to hold in a riskless asset.\n", "\n", "* State\n", " - w stock of wealth\n", "* Control\n", " - q consumption rate\n", "* Parameters\n", " - theta relative risk aversion\n", " - r continuous rate of return on asset\n", " - rho continuous discount rate" ], "metadata": { "collapsed": false, "pycharm": { "name": "#%% md\n" } } }, { "cell_type": "markdown", "id": "96caa3b4-6910-48ad-903e-2cb6cfd17a80", "metadata": {}, "source": [ "## Preliminary tasks" ] }, { "cell_type": "code", "execution_count": 1, "id": "fd0c2767-10a4-4d35-8195-b54ad403e460", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "from compecon import ODE" ] }, { "cell_type": "markdown", "id": "bddcfc74-6ec5-47ab-adc1-725760256516", "metadata": {}, "source": [ "## Initial state and time horizon" ] }, { "cell_type": "code", "execution_count": 2, "id": "42d0e131-b5dc-459a-b65b-d379082b8e50", "metadata": {}, "outputs": [], "source": [ "winit = 1 # initial capital stock\n", "T = 50 # time horizon" ] }, { "cell_type": "markdown", "id": "edc91d5c-78e2-401b-8d6c-50182c2040a3", "metadata": {}, "source": [ "## SOLUTION & SIMULATION $r>\\rho$" ] }, { "cell_type": "markdown", "id": "63a24800-63c2-4c1e-836b-250991087ef8", "metadata": {}, "source": [ "### Model parameters" ] }, { "cell_type": "code", "execution_count": 3, "id": "276ac99b-ac57-4be5-9fc5-3affb3fc69c5", "metadata": {}, "outputs": [], "source": [ "𝜃 = 2.0 # relative risk aversion\n", "r = 0.08 # continuous rate of return on asset\n", "𝜌 = 0.05 # continuous discount rate" ] }, { "cell_type": "code", "execution_count": 4, "id": "cd10cbb9-3789-45f7-9d54-fc8a6b4ac398", "metadata": {}, "outputs": [], "source": [ "# V'>0 iff V''<0 iff sign>0 where\n", "\n", "sign = 𝜌 - r*(1-𝜃)\n", "\n", "if sign<0:\n", " print('Invalid Parameters')" ] }, { "cell_type": "markdown", "id": "b649a251-fee0-4039-974d-962f9ed58096", "metadata": {}, "source": [ "### Solve ODE" ] }, { "cell_type": "code", "execution_count": 5, "id": "df6c642b-c4f2-4e73-96d8-57d47abafbf0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "PARAMETER xnames NO LONGER VALID. SET labels= AT OBJECT CREATION\n" ] } ], "source": [ "g = lambda w: ((r-𝜌)/𝜃)*w\n", "\n", "problem1 = ODE(g, T, [winit])\n", "problem1.rk4(xnames=[r\"$r>\\rho$\"])" ] }, { "cell_type": "markdown", "id": "fb4b79b8-42f0-4fc8-aabf-c91b76b124df", "metadata": {}, "source": [ "## SOLUTION & SIMULATION $r<\\rho$\n", "\n", "### Model Parameters" ] }, { "cell_type": "code", "execution_count": 6, "id": "ffba8f4b-ecc6-4a49-9a1e-343ce6f5c54b", "metadata": {}, "outputs": [], "source": [ "𝜃 = 2.0 # relative risk aversion\n", "r = 0.05 # continuous rate of return on asset\n", "𝜌 = 0.08 # continuous discount rate" ] }, { "cell_type": "code", "execution_count": 7, "id": "21e5aa02-e445-4342-abf4-eec818193939", "metadata": {}, "outputs": [], "source": [ "# Assume theta>0. Then V'>0 iff V''<0 iff sign>0 where\n", "sign = 𝜌 - r*(1-𝜃)\n", "\n", "if sign<0:\n", " print('Invalid Parameters')" ] }, { "cell_type": "markdown", "id": "b3b6106d-9ef2-4429-94a9-81006ad1fdef", "metadata": {}, "source": [ "### Solve ODE" ] }, { "cell_type": "code", "execution_count": 8, "id": "27f3a35d-003a-4c6c-960f-e2e108559f64", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "PARAMETER xnames NO LONGER VALID. SET labels= AT OBJECT CREATION\n" ] } ], "source": [ "g = lambda w: ((r-𝜌)/𝜃)*w\n", "\n", "problem2 = ODE(g, T, [winit])\n", "problem2.rk4(xnames=[r\"$r<\\rho$\"])" ] }, { "cell_type": "markdown", "id": "03dfa7f0-a086-456e-9824-864507e7d1ee", "metadata": {}, "source": [ "## PLOT SOLUTIONS" ] }, { "cell_type": "code", "execution_count": 9, "id": "0dbb5e3c-2e26-4777-8b30-339c7d0f7ca5", "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": "
", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgIAAAEsCAYAAACxC9sXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAABPwUlEQVR4nO3deXhU1cEG8HeW7MlkX8gOIRsJgQSyEBURKLuCVUBcELGF+oGtUD+WfrbW1haXKgpYaitqQUXEIpSCiKhYMOwJAbKRhEAWQtbJZGayzXK/PyYZMs5kgySTkPf3PHkId8uZo+S+95xzzxEJgiCAiIiIhiSxtQtARERE1sMgQERENIQxCBAREQ1hDAJERERDGIMAERHREMYgQEQ9wheNeh/rlKyJQYCom0pKSvDyyy9j5syZGDt2LOLj4zF9+nS8+OKLyM/PNzv+1KlTiIyMxPLly61QWlObN29GZGQktm3bdlvX2bdvH1544YVeKpW5bdu2ITIyEps3b+70uP/7v/9DZGQk/v73v1vcX1JSgsjISERGRuK3v/2txWNUKhVGjRqF0aNHo6mp6bbL3pV169YhMjIShw4dMm7T6XT48MMPsXHjRpNjn3jiCURGRuLixYt9Xi4iBgGibvjmm28we/Zs7NixA2KxGCkpKUhOTgYAfPrpp5g3bx4+++wzK5eyb505cwZr1qxBdXW1tYuClJQUAEB6errF/ceOHTN+/8MPP1g8JiMjAzqdDvHx8bC3t+/9QnbD/v37sWHDBqhUKqv8fCIAkFq7AEQDXV1dHZ5//nmIxWJ88MEHSE1NNdn/1VdfYfXq1XjxxRcRHx+P8PBwAEBcXBwOHjwIJycnaxS71+n1emsXwagthJ0/f97i/rS0NIjFYiQnJ+PEiRO4cuUKRowYYXLMuXPnAMDsv2d/Gkh1SkMXWwSIuvDNN9+goaEBDz/8sMWbxvTp07F48WLo9Xp8/vnnxu0ODg4ICwuDn59ffxZ3SPDx8cGIESMgl8tx9epVk306nQ4nT55EZGQkpk2bBsByq8BACAJEAwGDAFEXamtruzxm9uzZeOCBBzBy5EjjNktjBNr66k+dOoUvvvgCDzzwAOLi4nDvvfdi48aN0Ol0UKvVePnll3H33XcjISEBjzzyCM6ePWvy8zrr8z906BAiIyOxbt26bn22N954A/fffz/i4+MxevRoTJ48Gb/97W9RXl5uPG7dunVYvHgxAODo0aNm19fr9di9ezfmz5+P+Ph4JCQk4PHHH8eRI0cs/tzGxkZs3rwZ06ZNQ1xcHObMmYO9e/d2Wd72OmoVyMzMhFKpxIQJE4w3+R8HAY1Gg4sXL0ImkyEmJuaWP0d368+SJ554AuvXrwcAfPzxxxbHRmg0GmzduhXTpk1DbGwsJk+ejDfeeAPNzc1dVxBRN7FrgKgLUVFRAIDPPvsMsbGxmD17NmxsbEyOiY2Nxeuvv97ta/7973/H8ePHER8fj5SUFJw6dQp/+9vf0NjYiPT0dFy7dg0JCQmoqqpCRkYGlixZgr1795oEjdtVUVGBhQsXory8HGFhYbj77ruhUqmQmZmJzz77DP/9739x4MABODs7Iz4+HhUVFUhLS4Ovry+SkpIQHx8PwDDi/fnnnzcem5CQAJFIhDNnzmDFihX45S9/iRUrVhh/bnNzM5YuXYr09HR4e3tj0qRJKC0txdq1axEWFtbt8qekpGDnzp1IT0/HvHnzjNvT0tIAGJ70Q0ND4e/vj1OnTkGj0Rj/u2VlZaGxsRF33XUXJBLJLX2OntSfJampqdBoNMjIyEBoaChGjx6NyMhIk2N+85vfoLi4GImJiQgJCcGZM2fw97//HQUFBdi6dWu364qoMwwCRF24++67kZKSgpMnT2Lt2rV4+eWXMWHCBCQlJSE5ORkRERE9vubx48fx9ttvY8aMGQCA77//HsuWLcM///lPhIWF4eDBg/D29gYAPP/889i/fz/27t2L559/vtc+15YtW1BeXo5nn30WK1euNG6vra3FY489hitXruDbb7/FAw88gIULFyI0NBRpaWmIjo7GX/7yF+PxO3fuxIEDBzB27Fhs2bLFWO7S0lI89dRT2Lx5M5KTkzF+/HgAwIcffoj09HTcfffdeOedd4wD9bZv344//elP3S5/UlISRCKRWYvA8ePHYWtra/x5EyZMwL/+9S9kZGQgKSkJgOVugZ5+jp7UnyXPPPMMfH19kZGRgbvuugu/+93vzI6pra3F559/jlGjRgEA8vPz8eCDD+Lbb79FSUkJgoKCul1fRB1h1wBRF0QiEbZu3YpFixZBKpVCqVTi8OHDePnll3H//fcbm/XVanW3r5mUlGQMAQBw7733wtHREQCwcuVK400IgLGfu7i4uJc+kYGHhwcmTZqEn//852bbp0+fDgBdNm8Dhhu7SCTCa6+9ZlLuwMBArF27FoIgYPv27cbtn332GUQiEf74xz+ajNZfvHix8Ubd3fJHREQgPz/fOOpepVLh4sWLSEhIgIODAwBY7B5oCwITJky45c/RW/XXmcWLFxtDAACEh4cbP8/ly5dv69pEbRgEiLrB0dERv//97/H999/jD3/4A6ZPnw53d3cAwI0bN/C3v/0N999/P65fv96t68XFxZltc3NzA3CzK6KNTCYDgF7vF161ahXeffdd2NnZGbfV1tbi+PHjyMrKAmDoo+5MRUUFrl27hmHDhiEkJMRsf2pqKsRiMc6cOQPAUFelpaUICwuDv7+/2fFTpkzp0WdITk6GXq/HhQsXAAAnT56EVqvFXXfdZVIGkUiEEydOGLelp6fDz8/P+CZBTz8H0Dv115WxY8eabWsbfKpUKm/r2kRt2DVA1ANeXl5YuHAhFi5cCEEQkJeXhy+//BI7duxAWVkZ1q5dix07dnR5HVdXV7NtIpEIwM1A8OPtfeHq1av46KOPcP78eVy7dg319fUmP7OrGe8qKioAANevXzfr326vtrYWGo0GlZWVAABfX1+LxwUEBPSo/CkpKdi+fTvS09ORmpqK48ePAzBt8vfw8EBkZCSysrLQ0NCA8vJyyOVyPPjgg7f8OdrGGtxu/XWlLQS2J5Uafm3z1UPqLQwCRJ3Q6/XIy8uDSqVCYmKiyT6RSISoqChERUVhxowZePjhh3H69GlUV1fDy8ur0+u2DVDrqzJ3x759+7B+/XrodDqMGDECEydOREREBOLi4nD+/Hm89dZbXV5Dp9MBALy9vY2T/HREq9V2eb2e1ktSUhIkEolxnEBaWhrc3NxMmtMBQzDIzc1FRkaGsdWmfbdATz+HjY1Nr9RfV/oyBBK1YRAg6oRIJMLChQuh1Wpx+vTpDkeAR0dHIyoqCpcuXYJCoegyCPRGuYCbN7D22p5KO6NWq/HSSy/BxsYG27ZtM7kpAoYm9u5o60t3c3MzGUDYkbaWgLKyMov7q6qquvVz27i4uCA6OhpZWVnG5v2ZM2dCLDbt9ZwwYQLef/99ZGZmoqSkxLjtVj9Hb9Uf0UDAMQJEnRCJRIiLi4NOp8POnTs7PK6lpQXl5eVwdHREYGBgn5erbbZCS3McZGZmdnl+YWEh1Go1xowZY3YTEwTB+Ape+9YFS0+ngYGB8PPzw9WrV4032PZycnIwY8YMrFmzBoAhCAwfPhxXr15FYWGh2fHff/99l2X/seTkZNTW1mL//v0AYDI+oE1iYiJsbW2Rl5eHjIwMhIeHw8fH55Y/x63UnyV84qeBgEGAqAvLly+HSCTCW2+9hQ8++AAtLS0m++vq6rBmzRrU1NRg0aJFJoPH+krbK4sHDhwwCQPHjx833hA70/ZknpOTgxs3bhi3t7S04JVXXjEOvms/QLHtc/14kNrjjz8OjUaD//3f/zWOAQAAuVyO//u//0NRUZHJwMAnnngCgGGSIoVCYdy+d+9efPPNN12W/cfamvI/+eQTADC7MQOGWR7Hjh2LjIwMXL161WLzf08+x63UnyUd1SlRf2LXAFEX7rnnHvz2t7/Fhg0b8Morr2DLli0YM2YMZDIZampqkJmZiebmZkyZMgWrVq3qlzKlpKRg1KhRyM7OxsyZM5GYmIjq6mpkZGTggQcewL///e9Oz/f19cX06dPx1VdfYdasWcbX9jIzM1FbW4uRI0eioKDAZIGhwMBASCQSnDt3Dj/72c8wfvx4/OIXv8DSpUtx7tw5fPfdd5gxYwbi4uJgZ2eHM2fOQK1WIzExEc8884zxOosWLUJaWhqOHDmCadOmISkpCZWVlTh//jzGjBnTrRaN9saPHw8bGxuUlZUhNDS0wxaZ1NRUnD592vj9j/Xkc9xK/VnS9obCl19+CZVKhcmTJ2P+/Pk9+vxEt4stAkTd8Nhjj2H//v1YsmQJAgMDkZWVhSNHjqCoqAipqal4++238de//tVsxsG+IpFI8P777+PRRx+FjY0Nvv/+e6jVavzpT3/Cr371q25d45VXXsEzzzwDb29vpKWlITs7G2FhYdiwYQN27doFqVSK//73v8ZBfp6ennjppZfg7++PkydPGpu/JRIJ3nnnHbz44osICwtDZmYmzp49i5CQEKxfvx7btm0zaSURi8XYtGkT1q9fDy8vL3z//feoqanB+vXrzd7J7w5HR0fExsYCsNwa0Katy0AqlVqcr6Cnn6On9WdJTEwMnnvuObi6uuL48ePG+Q2I+pNIuN33W4iIiGjQYosAERHREMYgQERENIQxCBAREQ1hDAJERERD2JB8fVCv10On4xhJIiIaOmxsLE/hPSSDgE4noK6uwdrFICIi6jfe3i4Wt7NrgIiIaAhjECAiIhrCGASIiIiGMAYBIiKiIYxBgIiIaAhjECAiIhrCGASIiIiGsCE5jwAREdFAoxcE/HClFh+dLUVpXSNeuX8URvvL+vznMggQERFZkVanx+G8KvzzdAmu1Nyc7C77hpJBgIiI6E7VqNFh38Ub+PhsKW4om43bnWwlmD/WHw+NGdYv5WAQICIi6kd1DRp8dr4Mn2Vch6JJa9zu6WSLRxMC8NMxw+Bs13+3ZwYBIiKifnBd0YRPzpVi38UbaNLqjduD3OzxRGIQZo3yhZ20/8fwMwgQERH1oZwKJXacKcU3l6ugb7fwbbSvM55MCsKkkV6QiEVWKx+DABERUS/TCwJOFMmx42wJzpUoTPYlh7hhcWIQEoPdIBJZLwC0YRAgIiLqJS1aPQ7lVuKjs6UoavcGgEQswrRIbzw2PhCRPs5WLKE5BgEiIqLbVN+kwZ7McuzKuI5qdYtxu5OtBPNGD8MjCf7wk9lbsYQds3oQOHbsGLZu3YqsrCyIxWKMGTMGzz33HMaOHdvpeSUlJXj11Vdx+vRpAMCkSZOwbt06eHh49EOpiYiIgPL6Juw8V4a9F8vRqLk5ANDH2RaPJATgwbj+fQPgVogEQRC6PqxvnD59GosXL0Z4eDgeeughaLVafPLJJ6isrMQnn3yCuLg4i+fJ5XI89NBDaGlpweLFi6HT6bBt2zYEBARg9+7dsLW17fTnajQ61NU1dHoMERFRR3IrlPjobCmO5FVB1+4uOtLLCY+PD8S0KG/YSAbWLP7e3i4Wt1s1CMybNw8KhQIHDx6Eg4MDAKC6uhqzZs1CTEwMPvjgA4vnbdy4Ef/4xz+wf/9+hIWFAQDS0tLw1FNP4Y9//CMWLFjQ6c9lECAiop4SBAFpV+X46GwpzhbXmexLCnbD44mBSAlxHxADAC3pKAhYLa4oFArk5uZixowZxhAAAF5eXkhMTERGRkaH5x44cABJSUnGEAAAqampGD58OA4cONCn5b5Tvf76n3H33eNRXV1ltq+4+ComTUrBW2/9xQolIyKyrmatHvsulmPR9nN4bs8lYwiQiIDpUd746PEEvDM/DhNCPQZsCOiM1TounJ2dcejQIZMQ0EYul0MikVg8T6FQoKSkBNOnTzfbFxMTg6NHj/Z2UYeE2Ng47Nu3B9nZWZg4cZLJvk2b3oSTkxOWLl1mncIREVlBtboFn5+/jj2Z5ZA3aozbHW0kmBfnh0UJAQN2AGBPWC0ISCQShIaGmm3Pzc1Feno67r77bovnVVRUAAB8fX3N9nl7e0OlUkGpVMLFxXITyO3KKq/HeyeL0dCi65Pr3wpHWwl+lhKMmGG3vjhFTEwsACAnxzQIpKUdx8mTaVi9ei1ksr5f/IKIyNouV6rwSXoZDudWQtNuAICPsy0WxAfgp3HD4GI/sAcA9sSA+iRqtRpr164FACxbZvnpU61WA4DFlgQ7OzsAQENDQ58FgZ3pZTh+pbZPrn07nGwleHn2rd+og4NDIZO5Ijs7y7hNq9Vi8+Y3MWJEGObO/WlvFJOIaEDSCwKOFdbi0/RSnP3RBEAxfi54dFwAJod7QTrABgD2hgETBBobG/HMM88gNzcXy5cvR1JSksXj9Hq9xe3ticV99x9qUUIA1C26AdcisGhc4G1fJyYmFhcvZkIQBIhEInz22U6UlBTjrbf+atJVo9VqsWXLW/jqq4MQBD0mTZqC1avXdvm2BhHRQNPQosN/sm7g0/QylNQ1GbeLRcB94V5YlBCAOH/ZoOz7764BEQTq6+uxfPlypKen46GHHsKqVas6PNbJyQkA0NzcbLavbVvbMX0hZpgMGx+M7bPrW1NMzGicOPEDiouvQSaT4Z//fA/33DMJ48ebhrIdOz7A+fPp2LFjFyQSKdatW413392CZ59dbaWSExH1zI36JnyWcR17L96AsvnmCoBOthLMHe2HhfEB8Hcd/P3/3WH1IFBTU4Onn34aOTk5WLhwIV566aVOk5e/vz8AoKrKfHR7ZWUlZDIZHB0d+6y8d7KYmNEAgOzsS8jMzIBGo8HKlc+ZHbd//148++wqeHl5AwCWLl2GF1/8DVaseK5PW2OIiG7Xxev1+ORcGb7LN33/P8DVHo8kBOD+WF842Vr91tivrPppVSqVMQQsWbIE69ev7/IcmUyGwMBAZGVlme3Lzs5GbOyd+bTeH2JiYiEWi3HgwL9x4cJ5LFr0BAICTLsclEolKisrEBERZdwWEREFlcqw3c9vWH8Xm4ioU1q9gO/yq7HzXCkulitN9sUHuuLRhADcE+Zp1RUArcmqQeAPf/gDcnJysHjx4m6FgDbTpk3D9u3bUVhYaDKhUFFREZ5++um+Ku4dz9HRCaGhw3H+fDo8PT3x5JNLzY5paDAM1nRyurloRtvAzLZ9REQDgbyhBXsv3sDn56+jUnVz/n+pWIRpUd5YlBCAKN++GVg+mFgtCBQWFmLfvn1wcXFBdHQ09u3bZ3bM3LlzUVJSgvT0dCQkJCAoKAgA8POf/xz79u3DkiVLsHTpUjQ3N+O9995DTEwM5s6d298f5Y4SHR2DK1cKsXz5Sjg6mo+1aNumVqvg5uYGwNBK0H4fEZE15VYosSvjOg7nVqKlXfu/q70UD40ZhofH+sPb2c6KJRxYrBYE2hYLUiqVHbYGzJ07F2fOnMH69euxYcMGYxDw8PDARx99hA0bNmDTpk2wt7fH1KlTsWbNGo5cvw1arRYZGecQFTUKM2fOsXiMi4sLfHx8kZ+fZ+w2yM/Pg7OzYTsRkTVodXp8m1+NXRnXceF6vcm+cG8nLBjrjxnRPrC3sTxZ3VBm1bUGrIVrDVi2Y8cH+Pvf/4qtW99HbOzoDo/74IN/4Nixo3jttbcgkUixfv2vERMTy7cGiKjf1ahb8MWFcvwrs9xk+V+JCLh3pBcWxPsjIdD1jn79r7s6WmtgaA2NJDP19QqcOnUChYUF2LlzBxYufKzTEAAATzzxFBSKOjz++AIIgh733TcVy5at6KcSExEZZnndlXEdRy5Xmcz+52ovxYNxw/DQmGF3xPS//YEtAkPc118fwksvvQB3dw/MmDEbv/jFyg7XeSAisqYWrR5HLlfhs4zryLphOvo/0scZC+L9MS3Sm83/HRiQyxBbC4MAEdHgUaVqxp7Mcuy5UI7ahpuL/0hEwH3h3lgY748xAXf27H+9gV0DREQ0aAiCgPNl9fj8/HV8k18Nnf7mM6u7gw0eHDMMD8UNg48LR//fLgYBIiIaMNQtWnyZXYnPM6+jsNq05Tba1xkL4wMwNdIbdlLOYtpbGASIiMjqCqrU+DzzOr7MrkSD5uaiblKxCFMivLAwPgCxw1zY/N8HGASIiMgqNDo9vsuvxufnryOjzPTdfz8XO/x0zDA8EOsHTyfOD9OXGASIiKhf3ahvwp4L5dh38YbJ4D8RgAnD3fHwGH+kDvcYsnP/9zcGASIi6nN6QcCpa3J8fr4cx6/UoN3YP7jaS/FArB9+OmYYAt0crFfIIYpBgIiI+kxdowb7L93AngvlKK1rMtk3epgLHh7rjykRHPxnTQwCRETUqwRBQNYNJT7PLMfXP1r4x14qxoxoHzw8xh+Rvs6dXIX6C4MAERH1ClWzFl/mVOKLC+XIrzJdljzUwwEPj/HHrFG+cLHnrWcg4X8NIiK6ZW1P/3syy3E4rwrNWr1xn0QswqSRnnh4jD/GBXHhn4GKQYCIiHpM2WR4+t970fzpf5jMDvNGD8MDsb7wcubMfwMdgwAREXWLIAi4VK7EFxcsPP2LgIkjvfBgnB+SQ9wh5tP/oMEgQEREnWp7+v/iQjkKqk2f/v1ldpgXNwz3x/Dpf7BiECAiIjOCIOBi69P/1xb6/ieGeeKncX5I4tP/oMcgQACA11//M/bt24O9e7+El5e3yb7i4qtYvPgRzJv3MJ577nkrlZCI+oPh6b8CX1y4Yf7072qPeaP9+PR/h2EQIABAbGwc9u3bg+zsLEycOMlk36ZNb8LJyQlLly6zTuGIqE/pBQHpJQrsu3QD3+VXmz393xvmiQf59H/HYhDoIWlFBhzPvg1Ri8raRTESbJ3RMP5X0PrG3/I1YmJiAQA5OaZBIC3tOE6eTMPq1Wshk8lut6hENIBUKpvxn6wK/PvSDZQpTGf9C2h9+p8T6wcvLvpzR2MQ6CGHzPdgd/WItYthRrBxhnLalls+Pzg4FDKZK7Kzs4zbtFotNm9+EyNGhGHu3J/2RjGJyMo0Oj2OFdZg36UbOHlVbjLnv41EhEkjvTA31g+JIW58+h8iGAR6qHHMzyDSqAdci0DjmJ/d9nViYmJx8WImBEGASCTCZ5/tRElJMd5666+QSCTG47RaLbZseQtffXUQgqDHpElTsHr1Wtja8qmBaKC6UqPGvos38GV2JeSNGpN94d5OmBvrhxnRPnB1sLFSCclaGAR6SOsbj/rZH1q7GH0iJmY0Tpz4AcXF1yCTyfDPf76He+6ZhPHjk0yO27HjA5w/n44dO3ZBIpFi3brVePfdLXj22dVWKjkRWaJu0eLr3Cr8+9INXCxXmuxztpNgepQP5o72Q5SPM2f9G8IYBMgoJmY0ACA7+xIyMzOg0WiwcuVzZsft378Xzz67yvh2wdKly/Dii7/BihXPQSzmCmJE1iQIAi5cr8e+izdw5HIVGjV6k/3jglzxQKwfJod7wd5G0sFVaChhECCjmJhYiMViHDjwb1y4cB6LFj2BgIBAk2OUSiUqKysQERFl3BYREQWVyrDdz29YfxebiADUqFtwMLsC+y7ewDV5o8k+b2dbzInxxf0xfghyd7BSCWmgYhAgI0dHJ4SGDsf58+nw9PTEk08uNTumocHwXrGT083lQ11cXEz2EVH/aNHqcfxKDfZnVeBEUS3arfYLiViEe0Z4YO5oP6SEekAqZtM/WcYgQCaio2Nw5Uohli9fCUdHJ7P9bdvUahXc3NwAGFoJ2u8jor4jCAJyKlT4T1YFDudWQtGkNdkf6uGAB2L9MGuULzz52h91A4MAGWm1WmRknENU1CjMnDnH4jEuLi7w8fFFfn6esdsgPz8Pzs6G7UTUN6pVzfgypxL7sypQVNNgss/JVoJpUd6YPcoXcf4yDvyjHmEQIKOdO3egvPw6fve7lzv9RXL//fOwffv7iI2Ng0Qixfvv/x2zZ9/PgYJEvaxZq8d/C2vwnyzzd/7FIiApxB1zRvni3pGeHPhHt4xBYIirr1fg1KkTKCwswM6dO7Bw4WOIjR3d6TlPPPEUFIo6PP74AgiCHvfdNxXLlq3opxIT3dnalvo9kF2Bw7lVUDabN/3PifHDzGgf+Lhwvn+6fSJBEISuD7uzaDQ61NU1dH3gEPD114fw0ksvwN3dAzNmzMYvfrHSZPIgIuoflcpmHMyuwH+yKsxG/bvYSTEtyhtzYnwR4+fCpn+6Jd7eLha3MwgQEVlJk0aH7wtq8J+sCpy6Jkf7X8ZiETAh1AOzY3wxMcwTdlJ2vdHt6SgIsGuAiKgf6fQC0kvrcDC7Et/lV0PdojPZP8LTEXNifDEz2odL/VK/YBAgIuoHBVVqfJlTgUM5lahUtZjsc7WXYnqUD2bH+CLal9P9Uv9iECAi6iOVymZ8lVuJL3MqkV9lOuGWVCzC3SM8MHOUL+4e7gFbNv2TlTAIEBH1InWLFt/lV+PL7EqcKa7DjwdhjQ2QYWa0D6ZEeHOlPxoQGASIiG6TVqfHqWt1+DKnAkcLatCsNV3oJ9jdAbNG+WBGtA8CXDnXPw0sDAJERLdAEARkV6jwZev7/vJGjcl+dwcbTIvyxsxRvhjFfn8awBgEiIh6oLSu0dDvn11p9r6/nVSMSSM9MTPaF8khbpBK2O9PAx+DABFRF6pVzfj6cjW+yqlE1g2lyT4RgMRgN8wc5YNJI73gbMdfqzS48P9YIiIL6ps0+PZyNb7Kq0J6SZ3JPP8AEO7thJnRPpgexal+aXBjECAiatWo0eFYYQ0O5VTixFU5tD+6+/u72mN6lDemRflgpBeX3aY7A4MAEQ1pGp0eJ67KcTi3Et8X1KDpRyP+PZ1s8ZNIb0yP8uY8/3RHYhAgoiFHpxeQUarAV7mV+Da/GvVNpiv8udhJMTncC9OjvZEQ6AaJmDd/unMxCBDRkCAIArJvKPFVbhW+zqtCtdp0ml97qRgTwzwxLcoHE0LdOdMfDRkDKgi88MILuHbtGnbs2NHlsQ8//DAuXrxotn369OnYtGlTXxSPiAYZQRCQX6XGN5ercDivCqV1TSb7JWIRJoS6Y0aUD+4J84SjLZfgpqFnwASB3bt3Y/fu3UhKSuryWEEQUFhYiKlTp2LatGkm+wICAvqqiEQ0CAiCgMKaBhzJq8KRvCqzd/1FAMYFuWJalA8mh3txml8a8qweBHQ6HbZu3YotW7Z0+5zS0lI0NDRgypQpmDt3bh+WjogGiys16tabfzWKahvM9sf4uWBalDemRnjzdT+idqwaBJqbmzF//nzk5eVh3rx5OHHiRLfOKygoAACEhYX1ZfGIaIC7WtOAry8bnvyv1Jjf/KN9nfGTSG9MifCGv6u9FUpINPBZPQioVCps3LgRs2bNwuTJk7t1Xn5+PoCbQaChoQGOjo59Vk4iGjiu1TbgyGXDk39Btdpsf5SPM6ZGemNKhBcC3bjAD1FXrBoEnJ2dcfjwYUilPStGfn4+nJycsGHDBhw8eBANDQ0ICgrCqlWrMHv27D4qLRFZS4m8EUcuG0b751eZ3/wjvJ0wNdLQ7B/kzps/UU9YNQiIxWKIxT1/RaegoABqtRpKpRKvvfYa6uvrsX37dqxevRoajQbz5s3r/cISUb8qrWvEN5ercSSvCrmVKrP94d5OmBphePIP8WCLINGt6lEQqKysxPHjx1FdXY2Wlhaz/SKRCCtWrOi1wnVkwYIF0Ov1eOyxx4zbZs+ejTlz5uD111/H/fffD4mErwERDTZFNQ34Nr8K316uxmULT/4jPB2NT/7DPXnzJ+oN3Q4CZ86cwbJly9DU1ARBECwe019BYNGiRWbb7O3tMXfuXGzZsgUFBQWIjIzs83IQ0e0RBAGXq9T4Nr8a3122PNo/1MPBOOAvjPP7E/W6bgeBv/zlL7C1tcWLL76I0aNHw95+4I3A9fDwAGAYPEhEA5MgCMi6ocS3l6vxbX41yhRNZseEeTlicrgXJod7I8zLkfP7E/WhbgeB3NxcrFixwur97xUVFVi6dClmzpyJlStXmuwrKioCAAQGBlqjaETUAZ1eQOZ1Bb69XI3v8qtRqTLvWoz2dcZ94V6YHM4+f6L+1O0g4ObmBgcH64/G9fX1hVKpxO7du7FkyRI4OzsDAMrLy7Fnzx4kJyfD29vbyqUkIq1Oj3MlCnybX42jBdWobdCYHRPnL8PkcC/cF+7F9/yJrKTbQeDBBx/Erl278PDDD/drICgpKUF6ejoSEhIQFBQEAPjd736HFStW4JFHHsH8+fOhVqvx8ccfQyqV4sUXX+y3shGRqRatHqeuyfFtfjWOFdZA8aNV/cQiICHQFfeFe+O+cE94O3OGPyJr6zAI/HjKX5FIhLKyMsycOROTJk2Cp6enWb9dXwwWPHPmDNavX48NGzYYg8DUqVPxzjvv4N1338Vf/vIX2NvbIykpCatXr+Zsg0T9TNWsxYmrcnxfUI3jV2qhbtGZ7JeKRUgMdsPkcC/cO9IT7o62ViopEVkiEjp4BSAqKqrnFxOJkJOTc9uF6msajQ51dRxQSHSrqlXN+G9hDY4W1OBsSR00OtNfI3ZSMVJC3DE5wgv3jPCEi73VlzUhGvK8vV0sbu/wX+c333zTZ4UhosHnam0Dvi+owfcF1bhYrjTb72gjQepwD0yO8MJdwz24pC/RINFhEPjxcr579+7F+PHjOxyRX1hYiCNHjmD58uW9W0Iisgq9ICD7hhJHW2/+V2sbzY7xdLLFxDAP3DvSC4lBbrCV9nymUCKyrg67Bn4sOjoar7/+OubMmWNx/86dO7FhwwZcuHChVwvYF9g1QGSZRqfH2ZK61if/GlSrzV/zC3Z3wKSRXpg00hMxw1wg5jv+RINCj7sGSkpK8MILLxhnERQEAVu3bsVnn31mdqwgCMjNzeVre0SDkKpZi7SiWnxfUIMfiswH+wFA7DAX3BvmiUkjvRDKqX2J7igdBoGgoCCEhITg+PHjAAwDAWtra9HYaN48KJFIMGLECDz77LN9V1Ii6jWVymYcv2IY7HemuA5avWnDoFQswvhgN0wa6YmJYXzNj+hO1u2ugaioKOOCPoMduwZoqBEEAbmVKhwrrMGxwlqLq/k52RoG+00a6YnU4R5wtuNIf6I7SUddA90OAncSBgEaCpo0OpwprsOxKzU4fqUWVRam9fV0ssW9YZ64d6QnxnOwH9EdrcdjBPbu3XtLP8jaaxEQDWXVqmYcu1KLY4U1OF1ch2at3uyYcG8n3BPmiYkjPBDtx8F+RENdpxMKiUSiDpcctngxTihE1K8EQcDlSjX+e6UGxwprkFNh3uRvIxFhfJAb7gnzxD0jPOAn45z+RENRj1sEtm/f3meFIaJb16zV42xrk/+xwhqLK/l5ONrgruEeuCfME8kh7pzch4g6xDECRINAtaoZPxTV4lhhLU5dk6PJQpP/SC8n3BPmgXtG8P1+IjLX4xYBSxoaGpCWlga1Wm3SZaDVaqFWq3Hy5Els3br19kpKRNDpBWTdUOKHolqkXbE8yl8qbmvy98DdIzy5jC8R3ZJuB4H09HQsX74cKtXNX0htYaBtFUJ3d/deLh7R0FHXqMHJq3L8UFSLE0W1Zkv4AoCbgw3uGuGBiSM8kBzqDidbvuJHRLen279F3n77bej1evz+97+HIAj4/e9/j3feeQcNDQ349NNPkZWVhU8//bQvy0p0RxEEAXmVKvxQVIsfrsiRdaMeegsddVE+zkgd4YHUUHfEDpNBImaTPxH1nm6PERg/fjwWLVqEX//619BoNIiPj8fmzZtx3333oaWlBQ899BAiIiLwxhtv9HWZbxvHCJC1qJq1OH3N8NSfViS3OJe/k60EySHuuGu4B1KHu8OLs/oRUS+47TECzc3NCA0NBQDY2NggJCQEOTk5uO+++2Bra4t58+bh448/7pXCEt0pBEFAUW0DfrhSix+KanG+rB46C4/9IzwdcddwD9w1wgNx/jLYSDixDxH1j24HAV9fX1RUVBj/HhQUhLy8POPfXVxcUFNT07ulIxqEGlp0OFdS1/rUX4vy+mazY+ykYiQGu7U+9XtwoB8RWU23g8DEiRPx8ccfY+zYsUhNTUV8fDz+8Y9/oKSkBMOGDcOhQ4fg6+vbl2UlGpAEQUB+lRonr8px4pocmWUKaHTmT/2BbvbGp/6EQDfYcTpfIhoAuj1GoLq6Go8++ihKSkqQlpYGkUiEOXPmQC6Xw8HBAWq1GqtWrcKyZcv6usy3jWME6HbVNWpw+pocaVflOHXVcl+/jUSEhEBXpA73wF3DPRDiweV7ich6emXRoebmZnzzzTeYNWsWAOD69evYvHkzFAoFJk6ciEceeaR3StvHGASop7R6AVnl9ThxVY4TV+XIuaGEpX84QW72SAn1QEqoO8YHuXFGPyIaMLj6YDsMAtQdN+qbcOKqHCevynG6WA5Vs87sGAcbMRKD3ZES6o4Joe4IdHOwQkmJiLrWKzMLtrS0YNeuXTh69CiuX7+OP//5z7C3t8d//vMfPP300/Dw8OiVwhJZQ5NGh/RSBU623vyLai2HxQhvJ6SEGl7t4wh/Ihrsuh0EVCoVlixZgkuXLsHLyws1NTVoampCVVUVtm3bhkOHDuHjjz+Gn59fX5aXqNcIgoDCmgacar3xZ5QpLC7b6+Zgg+QQN6QO90BSiDu8nGytUFoior7Ro5kF8/Ly8P777yMqKgqpqakAgGnTpuGvf/0rfv3rX+Ptt9/Ghg0b+qywRLerUtmM08VynL5Wh9PFdaixMMhPIgLi/GVICfXAhOHuiPRx5gI+RHTH6nYQ+Oqrr/Doo48iNTUVcrncZN/kyZPx2GOP4T//+U+vF5DodqhbtEgvUeDUNTlOF9ehqMZyc/8wmR0mtA7ySwx2g7Md5/AnoqGh27/t5HI5wsLCOtwfGBiI2traXikU0a1qG91veOKX42K50uJMfk62EiQGuyEpxB1JwW4IdncwLp5FRDSUdDsIBAYG4uLFi1iwYIHF/WlpaQgICOi1ghF1hyAIuFbbiNPFcpy6VodzJXVQt5iP7peIRYjzlyEp2A3JIe6I9nOBlIv3EBF1PwjMnz8fb7zxBuLi4jBx4kQAhuWHVSoVtm7diq+//hrPPfdcX5WTyKi2ocXwxH9NjlPX5KhUmffzA4b5+5ND3JEU4oaEQL7TT0RkSbfnERAEAb/5zW/wxRdfQCwWQ6/Xw9nZGWq1GoIgYMqUKdi0aRMkkoH/y5bzCAwuqmYtzpcpcLZYgdPFcuRXqS0e5+Vki6QQwxN/UrAbV+0jImqnxxMK/frXv0ZKSgqSkpIQEhJi3H7q1CkcPnwYJSUl0Ol0CAgIwJQpU3Dvvff2Tcn7AIPAwNak0eHC9XqcLanD2eI6ZN9QwsLU/XCwEWNc0M1+/hGejuznJyLqQI+DwKhRo9C2y8fHB0lJScZgEBQU1Hcl7QcMAgOLRqdHVrkSZ0oMffwXrtdbXLRHIgJG+bkgKcQdySHuiB3mwsl8iIi6qcdBoKGhAZmZmcjIyEBGRgYuXLgAhUIBkUgEPz8/YyhISkoadIMEGQSsS6cXkFepwtniOpwpqcP5UgWaLEzkIwIQ4eOM8UFuSAx2w9hAGZxs+VofEdGt6JW1BgoLC5Geno709HRkZmaiqKgIADBs2DAkJycjOTkZ8+bN65UC9yUGgf6lFwRcqW7Amdam/vTSOovz9gPAcA9HjA92w/hgNyQEusLNwaafS0tEdGfqk0WH5HI5Dhw4gD179iA7OxsikQg5OTm3XMj+wiDQtwRBQEldE84Wy3GmWIFzJXWQN2osHhvgao/xwW5IDHLDuCBXDvAjIuojvbLokEajQUZGBk6fPo1z584hMzMTjY2NkEgkGDt2LJKTk3ulsDS4CIKAa/JGpJcqkF5Sh/RSBao6eKXP29kW44MMT/zjg9zg72rfz6UlIqL2Og0CgiDg0qVLOHHiBE6dOoX09HQ0NTVBLBYjOjoaixYtQkpKCsaNGwdHR8f+KjNZmSAIKKptQHqJAudKFMgoU1icsx8wLNgzPsgV41pv/iGcwY+IaEDpMAisXLkSp0+fhlKpBABERkZi4cKFSE5ORmJiIpydnfutkGRdbX386aV1hht/qaLDpn6ZvRTxAa5ICHJFYrAbwrycuGAPEdEA1mEQOHLkCGxsbDBv3jw888wzCA4O7s9ykRXpBQH5VWpjU39GqQKKJq3FY90cbBAf6IpxgYabP2/8RESDS4eDBdeuXYvTp0+jvLwcEokEkZGRSElJMXYFODk59XdZew0HC5rS6QVcrlK1NvXX4XxZPZTNlm/8Ho42SAh0Q0KQKxICXTHc05E3fiKiQeCW3xq4du2acYzA6dOnUVNTA6lUitjYWCQnJyMlJQUJCQmwsxs8o72HehDQ6PTIqVDhfKkC6aUKnC9TWFyoBzAM7ksIdG39ckOIB/v4iYgGo157fTAvLw8nT57EqVOncPbsWdTX18PW1hZjxoxBSkoKVqxY0SsF7ktDLQioW7S4eL0eGWX1yCxT4FK5Es0WJvABAF8Xu5s3/iA3BLnZ88ZPRHQH6JN5BFpaWvDll19i586dOH/+POcRGCBq1C3ILFMgo6we50sVuFylgr6D/8r+MjvEBxkm7xkX5Ap/GW/8RER3ol6ZR6C4uBiZmZnIzMzEhQsXkJubC41GA3t7e9x1111ITEzslcJS9wmCgNK6JmSUKZBZpsD5snoUyxs7PD7MyxFjA1wRH+CKMQEy+Mn4Hj8R0VDWYYuAQqHAhQsXjDf9trUGBEGAi4sLxo0bh/HjxyMpKQkxMTGDYvnhNoO5RUCnF1BQpUZGmaFv/3xZfYfv8EvFIkT7uiA+UIaxAa6I85fBlVP2EhENST1uEUhOToZIJIIgCHB3d8f48eORmJiIxMREREdHs/m4nzRpdMiuUOJ8aT0yyhS4eL2+w4F9TrYSjPaXYWyA4cYf4+cCe5vBE9CIiKj/dRgEZsyYgaSkJCQmJiI8PLxfCvPCCy/g2rVr2LFjR5fHlpSU4NVXX8Xp06cBAJMmTcK6devg4eHR18XsU1WqZly4Xm/8yq1QQdtBB7+Ho+Ed/rEBrhgbIMNIb2dIxQxoRETUfR0GgbfeeqsfiwHs3r0bu3fvRlJSUpfHyuVyPPnkk2hpacHPfvYz6HQ6bNu2DXl5edi9ezdsbW37ocS3T6sXUFilRub1ely4bnjav17f3OHxwe4OGOMvw9hAQx9/IEf0ExHRbbL64u46nQ5bt27Fli1bun3Ohx9+iBs3bmD//v0ICwsDAIwZMwZPPfUU9u7diwULFvRVcW+LskmLC+U3n/azyuvRqLH8Gp9ULEKUrzPi/GWI85dhTIArvJwGR8AhIqLBw6pBoLm5GfPnz0deXh7mzZuHEydOdOu8AwcOICkpyRgCACA1NRXDhw/HgQMHBkQQEAQBxfJGk2b+KzUdD1B0c7C5edP3lyHK15n9+0RE1OesHgRUKhU2btyIWbNmYfLkyV2eo1AoUFJSgunTp5vti4mJwdGjR/ugpF1r0uiQU6FCZpnCeOPvaH5+EYARXo7GG3+cvysn7iEiIquwahBwdnbG4cOHIZV2vxgVFRUAAF9fX7N93t7eUKlUUCqVcHGx/JpEb7uWdRxNP2xGfpMLMnQjkS6MRKngDcPt3sDBRozYYTLjjX/0MBlc7K3eK0NERGTdICAWiyEWi3t0jlqtBgA4ODiY7Wtb76ChoaHfgoBweivu1vyAuyXAU60t+bVwRYnjKDR6jYXT8GR4j0yGxL5/ykNERNQTg+6xVK+3PLiuvZ6Gi9shTnoG+SeqMbzlMqSCBgDgAQU8Gk4AxSeA4q0QvhdB5xEBjV8CtL7x0PgmQOceDog5BoCIiKxr0AWBtuWPm5vNX7Nr29afSyQHx9wNxHwFua4Z0ups2NxIh7QiHTYV5yGpvwYAEEGAtDYP0to8IHsnAEBv4wytz5jWcJAAjW88BEevfis3ERERMAiDgL+/PwCgqqrKbF9lZSVkMhkcHR37u1iAxA5a33hofeMBPA0AEDVUw6YiA9KKDNhUpENacR5ijQoAINaoYFv2A2zLfjBeQicLhqb1GhrfBGi9YwDJ4FnemYiIBp9BFwRkMhkCAwORlZVlti87OxuxsbFWKJVlgqMXWob/BC3Df2LYoNdBIi9oDQXpsKnIgKQmDyIYZg6U1BdDUl8M5O8znC+2hdY7xhAOfMZA6xsPnWsoIOq/rg8iIrqzDbogAADTpk3D9u3bUVhYaJxLIC0tDUVFRXj66aetXLpOiCXQeUZC5xkJjFoEABC1KCGtvGBoNbiRDpuKdIgbqw379C2wqciATUWG8RJ6Wxm0PnGGbgXfsdD6jIHeaRjAVw+JiOgWdLj6oDVMnjwZAQEBJmsNlJSUID09HQkJCQgKCgIA1NbWYs6cOZBIJFi6dCmam5vx3nvvITg4GJ9++mmXUwwP6NUHBQFiZamh1aA1GEirsiDSW15hEAB0jj6tLQZjofEZA63PGAj27v1YaCIiGuh6vPrgQHHmzBmsX78eGzZsMAYBDw8PfPTRR9iwYQM2bdoEe3t7TJ06FWvWrBk06wx0SCSCXhaEZlkQmsPnGrbpWiCtyYW0MhPSyvOGgYjyfIgEwxsUkoZKSK5+DburXxsvo5OFGFsMtD5joPEeDdhYYewEERENaAOqRaC/DOgWge5qUcOm+lJrOMg0eUvBEkEkhs49vDUctAYEzyhAMsiDExERdUtHLQIMAncQUZPcEAoqMyGtOA9pZSYkDZUdHi9I7KD1GtXaYhAHrc/o1vkNBnxDERER9RCDQDt3ahAwIwgQq8uNLQaG1oMLELfUd3yK1B5az1HQ+oyG1ms0ND5xhnAgsenHghMRUW9jEGhnyAQBSwQ9JIqrkFZk3Gw9qLoEkc58gibjKRI7aD2jDW8reI+GxjsOOo8IhgMiokGEQaCdIR0ELNFrIZHnQ1p5ETZVFyCtughpdRZE2qYOTxHEttB6RUPrPdrw5RMHrUckxxwQEQ1QDALtMAh0g14LibzAEAqqLsKm6qKh5UDb2OEpgtgWWs+oduFgdOuARM6OSERkbQwC7TAI3CK9DpK6QkirLrS2HrSFg47rUhDbQOsR2TrmIAZar1hoPaMB2/5bD4KIiBgETDAI9CK9DhJFkWF2xKqLhpBQlWVcU8ESASLo3IYbQoHXKGi9Y6H1iuWiS0REfYhBoB0GgT4m6CGpK2oNBZduhoNO3lYAAJ2jL7TeMa0tBzHQesdCLwvm2gpERL2AQaAdBgErEASIlSWGYFCdZfiqugSJ+kanp+ltnFuDwc2WA51HOAclEhH1EINAOwwCA4eosaY1FGRBWm0ICRJ5oXFFRksM4w4ioDO2HBj+FGwt/09OREQMAiYYBAY4TQOkNTmQVme3tiBcgrQmt9O5DgDD+gpar2jDhEhe0dB6RrNrgYioFYNAOwwCg5BeC4m88Ga3QmvXgri5rvPTbJyg84wyTIjkNQpaz2joPKPYekBEQw6DQDsMAncIQYBYVW5oMWgbe1CT2+niS210smBDOPCMgtZrFHSe0dC5hrL1gIjuWAwC7TAI3NlELSpIavMMXQs1OZDW5EBSndPpK40AIEgdDMHA09CtoPMaBa1nFAQ7134qORFR32EQaIdBYAgS9BArSyGtzoG0JtsYDiSKq50OTAQAnXNAu26FaGi9WlsPuEojEQ0iDALtMAiQUYsa0tq81paDbEiqcyGtyelyzgNBYget+0joPCKh9YyEziMKWs8o6J39AZGonwpPRNR9DALtMAhQpwQBYmVZu26F1hYERRFEgr7TU/U2ztB5RkLrEdkaEgwBQXDw7KfCExFZxiDQDoMA3RJNo7H1QFJ7GdLaPEhqciFpqOzyVL2Dl2HNBc+bAUHnEcG3F4io3zAItMMgQL1J1FhrCAW1eZDW5BkDQlfdC0Dr+APPKGMrgtYjCjr3MEBq3w8lJ6KhhEGgHQYB6nOCALG6HJLWYGAIB4Y/u5oYSRCJoXMdfrOLwT0CWo9w6NyGc0lnIrplDALtMAiQ1eh1ENcXQ1qbC2nNzVYESV0hRIKu01MFkQQ611DoPMKhdY+4+af7CEDq0E8fgIgGKwaBdhgEaMDRNUNSd8XQtVCTawgItXmQ1Bd3eaoAEfSyYMP6C+1DgttIwNapHwpPRIMBg0A7DAI0aGgaIK0rbB2cmA+JPB+S2suQ1F/r8g0GANC5BELrHg6dRwR07uGGLgb3cAh2sn4oPBENJAwC7TAI0KCnbTK0ILQGA8Of+YZXHPXaLk/XOflB5xHRGhJutiII9u79UHgisgYGgXYYBOiOpWuBRHHVJBxI5ZchkV+BSN/S5el6ew/o3EdC6x4GndtI4/d6lyBALOmHD0BEfYVBoB0GARpy9FpI6ovbdTFcbg0J+V2+xQAAgtgWOrfh0LmHQes2Ejr3MOjcR0LnFgbB1rkfPgAR3S4GgXYYBIha6XWGNRhqL0MiL4CkrgBSeSEk8nyImxXduoTOyc8QCtqHBLeR0DsP43TLRAMIg0A7DAJEXRAEiJpqIZUXtAaEK5DICyCVF0CsLOnWQEVB6tjaxRDW2sXQGhJch3PCJCIrYBBoh0GA6DZomwzjEOQFhjca5AWQyAshlRdApO3635XhdccgaN3CoHMbcfPLdTj0Lv6ASNwPH4Jo6GEQaIdBgKgPCALE6huQyAtbuxgKjN9LVOXdu4TEzjBpUms40LYLCoK9B7saiG4Dg0A7DAJE/UvUojJ2L0jqDK0HkrorhtcdtU3duobeVmYYsNi+FaG1JYEDFom6xiDQDoMA0QAh6CFW3WgNBVcMf7Z91Zd0Oe1yG52jb2tIGA6da/uQEMz1GYhaMQi0wyBANAjoNJAoS0zDQduX+ka3LiGIxNC7BEHnNhxaV0NQ0LuGGrofXIIAiU0ffwiigYNBoB0GAaJBrkVtGLCoKILUJCQUdvu1R0Ekgd4lEDrXEEMwaP8lC+abDXTHYRBoh0GA6M4lapL/qAWhNSwornR7PIIAEfTOw8wDgmsodLIQLuZEgxKDQDsMAkRDkCBA3FBhaEmouwqJ4irEiquQ1F+DpK4IYo2q25fSOfrc7GIw+QqBYOfahx+C6NYxCLTDIEBEJlonUGrrbmgLCm1f4ua6bl9Kb+9hDAXGP2Uh0MuCoXf04SuQZDUMAu0wCBBRT4ia5JAort0MB/XXjC0L4saqbl9HkNpD5xIMnWswdLJg6GXB0MlCoJMZ/g4bhz78FDTUMQi0wyBARL1F1KKCWHHN0JKgMG1J6O7bDW10jj6t4aD1yzXE+He9ky9nXaTbwiDQDoMAEfULTaPhFcj6YkgU1yCuLzZ8X18MSf21bg9eBFpnXZQFmbckuAZD5xLMAYzUJQaBdhgEiMjqBAGihipjKGgLCGJF69972Jqgd/AybUlwCWoNDkHQOw3jnAnEINAegwARDXjaJkiUZZDUt7YkKNoFBsW1bi3w1EYQiaF3GgadLPBmQHAJgl4WaPjTeRgglvbhh6GBgEGgHQYBIhrUjG85tGtJMIaEYohV1yFC93+1CyKJYd4EWZAhKLgEtn4feHN8AoPCoMcg0A6DABHd0XTNECuvQ6IshURZAnF9aetYhRKIlSWQqCt6dDlBLIXe2d8QENpaEoyhIag1KEj66MNQb2EQaIdBgIiGNF0zJMoyiJWlreGg1NCaoCw1hIaGWwkKAa0tCYGGlgSXwNbwEAC9sz8gse2jD0PdNWCDQElJCV599VWcPn0aADBp0iSsW7cOHh4enZ738MMP4+LFi2bbp0+fjk2bNnV6LoMAEVEntE2QqK5DXG9oRZAoS0xDQ0Nljy4nQAS9ow/0Lv6mAcElEDrnAOhd/CHYuXGypT42IIOAXC7HQw89hJaWFixevBg6nQ7btm1DQEAAdu/eDVtbywlSEAQkJCQgNTUV06ZNM9kXEBCA8ePHd/pzGQSIiG6DthES5XXDIEZL3Q+N1T2+pN7GCfrWUGAICwHQufjfDAvOfhyncJs6CgJWrdUPP/wQN27cwP79+xEWFgYAGDNmDJ566ins3bsXCxYssHheaWkpGhoaMGXKFMydO7c/i0xERFIH6NzDoHMPg8bSfm0jJKpy4zgFsarM5HuJ8jpE+haTU8QaNcTyy4D8ssUfaXjzwQ96lwDonFsDgktAa2AIgN4lAIKt5Rsddc6qQeDAgQNISkoyhgAASE1NxfDhw3HgwIEOg0BBQQEAmJxHREQDhNQBOrcR0LmNsBwUBD1EDdWQqMogVpYZxiuoWv9Ulhm2N8lNThEJekhU1yFRXUdHMyLobWWGFgVnf+id/Q1vQjj7Q+80zLDdaRincbbAakFAoVCgpKQE06dPN9sXExODo0ePdnhufn4+gJtBoKGhAY6Ojn1STiIi6mUiMQQnH2idfADfeMvHaBosB4S24KAuh0ivNTlF3FIPcU09pDW5Hf5ovZ2bYYyC87DWsND2/bDW4DAMkA6tsGC1IFBRYRiV6uvra7bP29sbKpUKSqUSLi7mTT35+flwcnLChg0bcPDgQTQ0NCAoKAirVq3C7Nmz+7zsRETUx2wcofMIh84j3HKrgl4HcUOlaUBo/VOsKjcMdvxRqwIAiJvrIG6ug7Qmu8Mfrbd3N29VcPYzhAYnQ2CA1L73PquVWS0IqNVqAICDg3nysrOzA2B40rcUBAoKCqBWq6FUKvHaa6+hvr4e27dvx+rVq6HRaDBv3rw+LTsREVmZWGJ8iteigwHibWMVWr8kquut319v3X7d4hLT4ia5IURUZ3X44/UOnq2hwN/YkqBvbWXQOQ+D3slv0IQFqwUBvV7f5TFiseWVthYsWAC9Xo/HHnvMuG327NmYM2cOXn/9ddx///2QSDi5BRHRkNZurEKHNA2QqG9ArLwOsfrHYaH1+2aF2WnixhqIG2uA6ksdXlpv7w69kx90Tn6GkODkZ2hZcPIzhoWB8Nqk1YKAk5Nhpazm5mazfW3b2o75sUWLFplts7e3x9y5c7FlyxYUFBQgMjKyF0tLRER3JBvHrsNCi9oQFlTXTVsT2rcytNSbndbWsiCtyenw0oLUHnpHX2MwaAsKWs9oaAJS+yUkWC0I+Pv7AwCqqqrM9lVWVkImk/V4AGDbJEQNDZwjgIiIeomtE3S2htclOyJqURkCgbrcMMeC+sbNL1W5IUg01pifp21qXUzqmtm++slvoDl6Ya9+FEusFgRkMhkCAwORlWXeB5OdnY3Y2FiL51VUVGDp0qWYOXMmVq5cabKvqKgIABAYGNj7BSYiIuqAYOvc+eBGwLAGhLoCYtWN1haGcmNYkBi/r4BIr4EAEQT7zmfY7S1WnUdg2rRp2L59OwoLC42vAqalpaGoqAhPP/20xXN8fX2hVCqxe/duLFmyBM7OzgCA8vJy7NmzB8nJyfD29u63z0BERNQtEjvoZcHQy4Kh7egYQQ9RYy0glkCwd++XYll1iuHa2lrMmTMHEokES5cuRXNzM9577z0EBwfj008/ha2tLUpKSpCeno6EhAQEBQUBAI4cOYIVK1YgPDwc8+fPh1qtxscffwyNRoOdO3d2OdEQpxgmIqKhZkCuNQAAV65cwYYNG3D27FnY29vj3nvvxZo1a4z9/Xv27MH69euxYcMG/PSnPzWed+TIEbz77rvIzc2Fvb09kpKSsHr16m7NNsggQEREQ82ADQLWwCBARERDTUdBwPKL+kRERDQkMAgQERENYQwCREREQxiDABER0RDGIEBERDSEDcm3BoiIiMiALQJERERDGIMAERHREMYgQERENIQxCBAREQ1hDAJERERDGIMAERHREMYgQERENIQxCNyGkpISrFy5EklJSUhKSsKaNWtQW1tr7WINGi+88AKeeOIJs+2s144dO3YMjz76KMaMGYP4+HgsWbIE58+fNzmG9de1EydOYNGiRYiPj8c999yDP/3pT1Cr1SbHsB67Jzc3F7Gxsdi8ebPJdtZf1x5++GFERkaaff3yl780HtMf9Sjt1asNIXK5HE8++SRaWlrws5/9DDqdDtu2bUNeXh52794NW1tbaxdxQNu9ezd2796NpKQkk+2s146dPn0aP//5zxEeHo5Vq1ZBq9Xik08+weOPP45PPvkEcXFxrL9uOHnyJJYuXYqYmBg8//zzKC8vx/bt23Hp0iV8/PHHEIvFrMdu0mq1WL9+PTQajcl21l/XBEFAYWEhpk6dimnTppnsCwgIANCP9SjQLXnzzTeF6OhooaCgwLjthx9+ECIiIoRdu3ZZsWQDm1arFTZv3ixERkYKERERwuOPP26yn/Xasblz5wqTJk0SGhoajNuqqqqExMREYcmSJYIgsP6648EHHxTuu+8+obGx0bjto48+EiIiIoSjR48KgsB67K4tW7YIMTExQkREhLBp0ybjdtZf14qLi4WIiAjhX//6V4fH9Fc9smvgFh04cABJSUkICwszbktNTcXw4cNx4MABK5Zs4GpubsaDDz6IzZs3Y+7cufD19TU7hvVqmUKhQG5uLmbMmAEHBwfjdi8vLyQmJiIjIwMA668rzc3NcHd3x4IFC2Bvb2/c3tYylZeXB4D12B15eXnYunUr/ud//sdsH+uvawUFBQBgUkc/1l/1yCBwCxQKBUpKShATE2O2LyYmBpcuXbJCqQa+5uZmqFQqbNy4Ea+++iqkUtOeKdZrx5ydnXHo0CEsWbLEbJ9cLodEImH9dYOdnR22bduGX/ziFybbc3JyAAD+/v6sx25o6xJITU3FAw88YLKP9dc9+fn5AG4GgYaGBpP9/VmPDAK3oKKiAgAsPtF6e3tDpVJBqVT2d7EGPGdnZxw+fBizZs2yuJ/12jGJRILQ0FCzusnNzUV6ejri4+NZf7egrKwMe/bswZ/+9CdERETgJz/5CeuxG/7xj3/g2rVr+MMf/mC2j/XXPfn5+XBycsKGDRsQHx+P+Ph4TJ061fik35/1yMGCt6BtdHH7Jto2dnZ2AAzpzsXFpV/LNdCJxWKIxR1nT9Zrz6jVaqxduxYAsGzZMtZfD9XV1WHy5MkADHX2wgsvwM7OjvXYhfz8fLzzzjv43e9+Bz8/P5SWlprsZ/11T0FBAdRqNZRKJV577TXU19dj+/btWL16NTQaDUJCQgD0Tz0yCNwCvV7f5TGd3fDIMtZr9zU2NuKZZ55Bbm4uli9fjqSkJJw7d67L81h/N4lEImzcuBEtLS3YsWMHnnrqKbz55pvw9vbu8tyhWo86nQ7r16/HuHHjsGDBAovH8N9x9yxYsAB6vR6PPfaYcdvs2bMxZ84cvP7669i0aVOX1+itemQQuAVOTk4ADH3eP9a2re0Y6j7Wa/fU19dj+fLlSE9Px0MPPYRVq1YBYP31lKurq7GbasaMGZgzZw5eeeUV/O1vfwPAerRk27ZtyM3NxSeffGJ8l72+vh6AIZzW1tby/8NuWrRokdk2e3t7zJ07F1u2bOnXemQQuAX+/v4AgKqqKrN9lZWVkMlkcHR07O9iDXqs167V1NTg6aefRk5ODhYuXIiXXnoJIpEIAOvvdtjb22PSpEnYsWMHfHx8ALAeLTl27Bg0Gg3mz59vtm/btm3Ytm0b9u7dC4D1d6s8PDwAGIIV0D/1yCBwC2QyGQIDA5GVlWW2Lzs7G7GxsVYo1eDHeu2cSqUyhoAlS5Zg/fr1JvtZf10rLCzEz3/+czz99NMmTbKAoW9bJBLB1taW9diBtWvXGlsA2lRXV+N///d/MXfuXMybNw8jRoxg/XWhoqICS5cuxcyZM7Fy5UqTfUVFRQCAwMDAfqtHdtTcomnTpuHEiRMoLCw0bktLS0NRUVGHo+Kpa6zXjv3hD39ATk4OFi9ebBYC2rD+OhcSEgKlUolPP/0ULS0txu1lZWU4fPgwEhMT4ezszHrsQGxsLFJTU02+EhISAABBQUFITU2FnZ0d668Lvr6+UCqV2L17N1QqlXF7eXk59uzZg+TkZHh7e/dbPYoEQRB67WpDSG1tLebMmQOJRIKlS5eiubkZ7733HoKDg/Hpp59yCs1umDx5MgICArBjxw7jNtarZYWFhZg1axZcXFzwm9/8BhKJxOyYuXPnsv66Yd++fVizZg3Gjh2LBx54AHK5HB9//DE0Gg0++eQTREREsB57oLS0FFOmTMHKlSvx7LPPAuC/4+44cuQIVqxYgfDwcMyfPx9qtdr4/+HOnTsRFhbWb/XIIHAbrly5gg0bNuDs2bOwt7fHvffeizVr1hj7eKhzloIAwHq1ZOfOnfj973/f6TFts+Kx/rp28OBBvPfee7h8+TIcHR2RkpKCVatWYfjw4cZjWI/dYykIAKy/7jhy5Ajeffdd5Obmwt7eHklJSVi9erXJTIL9UY8MAkREREMYxwgQERENYQwCREREQxiDABER0RDGIEBERDSEMQgQERENYQwCREREQxiDABER0RDGtQaIqFPr1q3DF1980eVxAQEBKCsrw/bt25GcnNwPJSOi3sAJhYioUxkZGSguLjb+/dy5c9i1axcWLlyIcePGGbcHBgaitLQUd911F7y8vKxRVCK6BWwRIKJOxcfHIz4+3vh3nU6HXbt2YezYsZg7d67Jse2DARENDhwjQERENIQxCBBRr9izZw8iIyNx6tQpk7/n5ubil7/8JeLj45GSkoJXX30VOp0OX3zxBaZPn46xY8fikUceQW5ursn1FAoF/vjHP+Kee+5BbGwsZs6ciX/+859gbyZR72LXABH1qWXLlmHcuHFYt24dDh8+jPfffx+XL19GXl4ennzySQiCgK1bt+KXv/wlDh48CKlUioaGBjz++OMoLy/Ho48+Cj8/P5w8eRJ//vOfcfXqVbz44ovW/lhEdwwGASLqU2PHjsXGjRsBALNmzcKECROQlpaGf//73wgPDwcAqNVq/O1vf0NpaSlCQ0Oxbds2FBUV4V//+hciIyMBAI8++ijefPNNvPvuu1i4cCGioqKs9pmI7iTsGiCiPjV16lTj9y4uLvDw8EBoaKgxBACGNw4AoKqqCgBw+PBhREREwNvbG7W1tcavtmt99913/fgJiO5sbBEgoj7141cJpVIpPD09TbZJJBIAgF6vBwAUFxejqakJEyZMsHjN8vLyPigp0dDEIEBEfartJt+eSCTq9BydTodx48Zh5cqVFvf7+Pj0StmIiEGAiAaggIAAqNVqpKammmxXKBQ4ceIEQkJCrFQyojsPxwgQ0YAzefJk5Obm4ujRoybbt27dil/96lfIz8+3TsGI7kBsESCiAWf58uU4fPgwVq5ciUceeQTh4eE4d+4c9u3bh4kTJ2LixInWLiLRHYNBgIgGHDc3N+zatQubNm3CoUOHsGvXLvj7++N//ud/sGzZMojFbMwk6i1cdIiIiGgIY6wmIiIawhgEiIiIhjAGASIioiGMQYCIiGgIYxAgIiIawhgEiIiIhjAGASIioiGMQYCIiGgIYxAgIiIawv4fcjb81XgkXIAAAAAASUVORK5CYII=\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot optimal wealth path\n", "fig, ax= plt.subplots(figsize=[8,4])\n", "\n", "wealth = pd.concat([problem1.x, problem2.x], axis=1)\n", "wealth.plot(ax=ax)\n", "ax.set(title='Simulated Wealth',\n", " xlabel='Time',\n", " ylabel='Wealth');" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" } }, "nbformat": 4, "nbformat_minor": 5 }